﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Diego_Data_Mudanca_Requisito_01
{
    public class business
    {
        public List<DateTime> gerarListaComDiasUteis(DateTime data, int quantidadeDeDias, bool preencherListaComDiasUteis)
        {
			  List<DateTime> listaDeDias = recuperarDatas( data, quantidadeDeDias, preencherListaComDiasUteis );

				return listaDeDias;
        }

		  public List<DateTime> recuperarDatas( DateTime dataInicial, int quantidadeDeDias, bool listaComDiasUteis )
        {
            List<DateTime> listaDeDatas = new List<DateTime>();
				int dia = 1;

				while( listaDeDatas.Count != quantidadeDeDias )
				{
					if( listaComDiasUteis )
					{
						if( verificarSeEFinalDeSemanaOuFeriado( dataInicial.AddDays( -dia ) ) )
						{
							listaDeDatas.Add( dataInicial.AddDays( -dia ) );
						}
					}
					else
					{
						listaDeDatas.Add( dataInicial.AddDays( -dia ) );
					}
					
					dia++;
				}

            return listaDeDatas;
        }
        
        private bool verificarSeEFinalDeSemanaOuFeriado(DateTime item)
        {
            List<DateTime> listaDeFeriados = recuperarListaDeFeriados();

            //Verifica se é um feriado
            if (listaDeFeriados.Contains(item))
            {
                return false;
            }
            else
            {
                if (item.DayOfWeek == DayOfWeek.Sunday || item.DayOfWeek == DayOfWeek.Saturday)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
        }

        private List<DateTime> recuperarListaDeFeriados()
        {
            List<DateTime> listaDeFeriados = new List<DateTime>();
            listaDeFeriados.Add(new DateTime(2012, 02, 21));
            return listaDeFeriados;
        }

			//1) Retornar os últimos 7 Dias úteis --OK
			//2) Retornar o último dia útil 
			//3) Retornar os últimos 5 dias corridos 
			//4) Retornar os últimos 7 dias corridos    
			//5) Retornar os últimos 30 dias corridos

    }
}
